﻿using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Maestro_Proveedores.evaluacionDeDesempeno.indicadores
{
    /// <remarks>
    /// <para>Este indicador busca evaluar porcentualmente el desempeño del contratista de acuerdo al número de accidentes presentados durante la prestación del servicio, entendiendo un resultado del 0% como ausencia de accidentes.</para>
    /// <para>NAP / NTS = (Número de Accidentes presentados / Número Total Servicios Suministrados) * 100</para>
    /// </remarks>
    public class Accidentalidad : Indicador
    {
        _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_accidenteTableAdapter pRV_accidenteTableAdapter = null;
        _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_horas_hombreTableAdapter pRV_horas_hombreTableAdapter = null;
        /// <summary>
        /// Cuando se crea una nueva instancia del indicador, se incializan todas sus variables y propiedades. Tanto las propias como las herededas de la calse Indicador
        /// </summary>
        public Accidentalidad()
        {
            //--- inicializacion de variables y propiedades.
            this.Peso = 0.30d;
            this.TipoIndicador = Enums.TipoIndicador.Servicio;
            this.pRV_accidenteTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_accidenteTableAdapter();
            this.pRV_horas_hombreTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_horas_hombreTableAdapter();
        }
        /// <summary>
        /// Redefinicion del metodo toString()
        /// </summary>
        /// <returns>Nombre Completo del presente indicador</returns>
        public override string ToString()
        {
            return "Índice de Accidentalidad";
        }
        /// <summary>
        /// redefinición del metodo Calcular(), declarado en la clase padre Indicador como un metodo abstracto (se debe redefinir obligatoriamente en cualquier clase que herede de la clase Indicador)
        /// </summary>
        /// <returns></returns>
        protected override bool calcular()
        {
            float totalHoras = 0;
            float totalAccidentes = 0;
            try
                {
                //--- hago los calculos y operaciones aritmeticas
                    string temp = string.Empty;
                    temp = this.pRV_horas_hombreTableAdapter.Scalar_SUM_horasHombre(this.registroProveedor.id_proveedor, this.FechaInferior, this.FechaSuperior).ToString();

//System.Windows.Forms.MessageBox.Show(temp.ToString());
                    if (temp.Equals(string.Empty) || temp.Equals("0") || temp.Equals("0,00"))
                    {
                        return false;
                    }
                    else
                    {
                        totalHoras = float.Parse(temp);
                    }

                    //System.Windows.Forms.MessageBox.Show(totalHoras.ToString());
                    //System.Windows.Forms.MessageBox.Show(this.FechaInferior + ", " + this.FechaSuperior + ", " + this.registroProveedor.id_proveedor);
                    temp = this.pRV_accidenteTableAdapter.Scalar_SUM_numeroOcurrencias(this.FechaInferior, this.FechaSuperior,this.registroProveedor.id_proveedor).ToString();
//System.Windows.Forms.MessageBox.Show(temp.ToString());                        
                    if (temp.Equals(string.Empty))
                    {
                        totalAccidentes = 0;
                    }
                    else
                    {
                        totalAccidentes = float.Parse(temp);
                    }
                }
                catch (Exception ex)
                {
                    Maestro_Proveedores.herramientas.MessageException.show(ex);                    
                    return false;
                }
            
            //--- Guardo el resultado del indicador
            this.Resultado = (totalAccidentes / totalHoras) * 100;
            //--- aqui se determina el puntaje final del proveedor en este indice, para mayor informacion consultar el proyecto: DISEÑO E IMPLEMENTACIÓN DEL PROCESO DE CALIFICACIÓN,EVALUACIÓN, DESARROLLO Y CERTIFICACIÓN DE PROVEEDORES DE COTECMAR
            if (Resultado <= 0) 
            {
                this.PorcentajeEvaluacion = 100;                
            }
            else if (Resultado <= 10)
            {
                this.PorcentajeEvaluacion = 75;
            }
            else if (Resultado <= 25)
            {
                this.PorcentajeEvaluacion = 50;
            }
            else
            {
                this.PorcentajeEvaluacion = 25;            
            }
            return true;
        }
    }
}